/**
 * 一元运算符
 *   + -
 * 
 * 二元运算符
 *   + - * / %
 * 
 * 算术赋值运算符
 *   = += -= *= /= %=
 * 
 * 整数和浮点除法
 *   如果其中一个（或两个）操作数是浮点值，则除法运算符执行浮点除法。浮点除法返回浮点值，并保留小数部分。与所有浮点算术运算一样，可能会出现舍入错误。
 *   如果两个操作数都是整数，则除法运算符执行整数除法。整数除法会删除所有小数并返回整数值。结果的小数部分被丢弃
 * 
 * 除以 0 和 0.0
 *   除数为 的整数除法0将导致未定义的行为，因为结果在数学上是未定义的！
 *   除以浮点值的结果0.0是实现定义的（意味着行为由编译器/体系结构确定）。在支持 IEEE754 浮点格式的体系结构上，结果将为NaN或Inf。在其他架构上，结果可能是未定义的行为。
 * 
 * 
 */

#include <iostream>

int main()
{
    int x{ 7 };
    int y{ 4 };

    std::cout << "int / int = " << x / y << '\n';
    // 如果任一操作数是浮点数，则结果将是浮点除法，而不是整数除法。
    std::cout << "double / int = " << static_cast<double>(x) / y << '\n';
    std::cout << "int / double = " << x / static_cast<double>(y) << '\n';
    std::cout << "double / double = " << static_cast<double>(x) / static_cast<double>(y) << '\n';


    std::cout << "You have 12 apples. Enter how many people to divide them between: ";
	int x1 {};
	std::cin >> x1;

	std::cout << "Each person gets " << 12 / x1 << " whole apples.\n"; // 12 and x are int, so this is integer division


    std::cout << "You have 12 apples. Enter how many servings of apples you want: ";
	double d {};
	std::cin >> d;

	std::cout << "Each serving is " << 12 / d << " apples.\n"; // d is double, so this is floating point division

    return 0;
}